Skip to content

Conversation

github-actions[bot]
Copy link

This PR contains a snapshot of wallaby from upstream.

stephenfin and others added 2 commits February 28, 2023 13:36
os-vif 1.15.0 added the ability to create an OVS port during plugging
by specifying the 'create_port' attribute in the 'port_profile' field.
By delegating port creation to os-vif, we can rely on it's 'isolate_vif'
config option [1] that will temporarily configure the VLAN to 4095
(0xfff), which is reserved for implementation use [2] and is used by
neutron to as a dead VLAN [3]. By doing this, we ensure VIFs are plugged
securely, preventing guests from accessing other tenants' networks
before the neutron OVS agent can wire up the port.

This change requires a little dance as part of the live migration flow.
Since we can't be certain the destination host has a version of os-vif
that supports this feature, we need to use a sentinel to indicate when
it does. Typically we would do so with a field in
'LibvirtLiveMigrateData', such as the 'src_supports_numa_live_migration'
and 'dst_supports_numa_live_migration' fields used to indicate support
for NUMA-aware live migration. However, doing this prevents us
backporting this important fix since o.vo changes are not backportable.
Instead, we (somewhat evilly) rely on the free-form nature of the
'VIFMigrateData.profile_json' string field, which stores JSON blobs and
is included in 'LibvirtLiveMigrateData' via the 'vifs' attribute, to
transport this sentinel. This is a hack but is necessary to work around
the lack of a free-form "capabilities" style dict that would allow us do
backportable fixes to live migration features.

Note that this change has the knock on effect of modifying the XML
generated for OVS ports: when hybrid plug is false will now be of type
'ethernet' rather than 'bridge' as before. This explains the larger than
expected test damage but should not affect users.

Changes:
  lower-constraints.txt
  requirements.txt
  nova/network/os_vif_util.py
  nova/tests/unit/virt/libvirt/test_vif.py
  nova/tests/unit/virt/libvirt/test_driver.py
  nova/virt/libvirt/driver.py

NOTE(stephenfin): Change I362deb1088c88cdcd8219922da9dc9a01b10a940
("objects: Fix VIFMigrateData.supports_os_vif_delegation setter") which
contains an important fix for the original change, is squashed into this
change. In addition, the os-vif version bump we introduced in the
original version of this patch is not backportable and as a result, we
must introduce two additional checks. Both checks ensure we have a
suitable version of os-vif and skip the new code paths if not. The first
check is in the libvirt driver's 'check_can_live_migrate_destination'
function, which as the name suggests runs on the destination host early
in the live migration process. If os-vif is not new enough on the
destination, we will report that we cannot support os-vif delegation.
The other check is in the '_nova_to_osvif_vif_ovs' helper in
'nova.network.os_vif_util'. This simply ensures we don't try to set an
invalid attribute on the os-vif object if the version isn't new enough.
Two tests are modified to accommodate these checks with similar version
check logic. The lower-constraints job can be relied on to validate
behavior on the older version of os-vif.

[1] https://opendev.org/openstack/os-vif/src/tag/2.4.0/vif_plug_ovs/ovs.py#L90-L93
[2] https://en.wikipedia.org/wiki/IEEE_802.1Q#Frame_format
[3] https://answers.launchpad.net/neutron/+question/231806

NOTE(auniyal):
  * libvirt: Always delegate OVS plug to os-vif is squashed
openstack@fa0fb2f
  * Updated fakelibvirt.Domain.XMLDesc to add pci address
for ovs interface, which is a patial backport of
openstack@1ad287b

Change-Id: I11fb5d3ada7f27b39c183157ea73c8b72b4e672e
Depends-On: Id12486b3127ab4ac8ad9ef2b3641da1b79a25a50
Closes-Bug: #1734320
Closes-Bug: #1815989
(cherry picked from commit a62dd42)
@github-actions github-actions bot requested a review from a team as a code owner April 24, 2023 08:20
@github-actions github-actions bot added automated Automated action performed by GitHub Actions synchronisation labels Apr 24, 2023
@markgoddard markgoddard merged commit f41d03a into stackhpc/wallaby Apr 25, 2023
@markgoddard markgoddard deleted the upstream/wallaby-2023-04-24 branch April 25, 2023 08:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
automated Automated action performed by GitHub Actions synchronisation
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants